// using UnityEngine;
// using GGameFramework.Core.FSM;
//
// namespace GGameFramework.Examples.FSM
// {
//     /// <summary>
//     /// 玩家状态机配置验证器
//     /// 定义哪些状态之间可以相互转换
//     /// </summary>
//     public class PlayerFSMConfiguration : FsmConfiguration<PlayerController>
//     {
//         public PlayerFSMConfiguration()
//         {
//             // 配置有效的状态转换规则
//             
//             // 空闲状态转换
//             AddValidTransition<PlayerIdleState, PlayerMoveState>();      // 空闲 -> 移动
//             AddValidTransition<PlayerIdleState, PlayerJumpState>();      // 空闲 -> 跳跃
//             AddValidTransition<PlayerIdleState, PlayerAttackState>();    // 空闲 -> 攻击
//             AddValidTransition<PlayerIdleState, PlayerHurtState>();      // 空闲 -> 受伤
//             AddValidTransition<PlayerIdleState, PlayerDeathState>();     // 空闲 -> 死亡
//             
//             // 移动状态转换
//             AddValidTransition<PlayerMoveState, PlayerIdleState>();      // 移动 -> 空闲
//             AddValidTransition<PlayerMoveState, PlayerJumpState>();      // 移动 -> 跳跃
//             AddValidTransition<PlayerMoveState, PlayerAttackState>();    // 移动 -> 攻击
//             AddValidTransition<PlayerMoveState, PlayerFallState>();      // 移动 -> 下落
//             AddValidTransition<PlayerMoveState, PlayerHurtState>();      // 移动 -> 受伤
//             AddValidTransition<PlayerMoveState, PlayerDeathState>();     // 移动 -> 死亡
//             
//             // 跳跃状态转换
//             AddValidTransition<PlayerJumpState, PlayerIdleState>();      // 跳跃 -> 空闲
//             AddValidTransition<PlayerJumpState, PlayerFallState>();      // 跳跃 -> 下落
//             AddValidTransition<PlayerJumpState, PlayerAttackState>();    // 跳跃 -> 攻击（空中攻击）
//             AddValidTransition<PlayerJumpState, PlayerHurtState>();      // 跳跃 -> 受伤
//             AddValidTransition<PlayerJumpState, PlayerDeathState>();     // 跳跃 -> 死亡
//             
//             // 下落状态转换
//             AddValidTransition<PlayerFallState, PlayerIdleState>();      // 下落 -> 空闲
//             AddValidTransition<PlayerFallState, PlayerAttackState>();    // 下落 -> 攻击（空中攻击）
//             AddValidTransition<PlayerFallState, PlayerHurtState>();      // 下落 -> 受伤
//             AddValidTransition<PlayerFallState, PlayerDeathState>();     // 下落 -> 死亡
//             
//             // 攻击状态转换
//             AddValidTransition<PlayerAttackState, PlayerIdleState>();    // 攻击 -> 空闲
//             AddValidTransition<PlayerAttackState, PlayerMoveState>();    // 攻击 -> 移动
//             AddValidTransition<PlayerAttackState, PlayerJumpState>();    // 攻击 -> 跳跃
//             AddValidTransition<PlayerAttackState, PlayerAttackState>();  // 攻击 -> 攻击（连击）
//             AddValidTransition<PlayerAttackState, PlayerHurtState>();    // 攻击 -> 受伤
//             AddValidTransition<PlayerAttackState, PlayerDeathState>();   // 攻击 -> 死亡
//             
//             // 受伤状态转换
//             AddValidTransition<PlayerHurtState, PlayerIdleState>();      // 受伤 -> 空闲
//             AddValidTransition<PlayerHurtState, PlayerDeathState>();     // 受伤 -> 死亡
//             
//             // 死亡状态转换
//             AddValidTransition<PlayerDeathState, PlayerIdleState>();     // 死亡 -> 空闲（重生后）
//             
//             // 添加状态名称
//             AddStateName<PlayerIdleState>("空闲状态");
//             AddStateName<PlayerMoveState>("移动状态");
//             AddStateName<PlayerJumpState>("跳跃状态");
//             AddStateName<PlayerFallState>("下落状态");
//             AddStateName<PlayerAttackState>("攻击状态");
//             AddStateName<PlayerHurtState>("受伤状态");
//             AddStateName<PlayerDeathState>("死亡状态");
//             
//             Debug.Log("玩家状态机配置完成");
//         }
//         
//         /// <summary>
//         /// 验证状态转换是否有效
//         /// </summary>
//         public bool ValidateTransition<TFromState, TToState>() 
//             where TFromState : FsmState<PlayerController> 
//             where TToState : FsmState<PlayerController>
//         {
//             Type fromStateType = typeof(TFromState);
//             Type toStateType = typeof(TToState);
//             
//             return IsValidTransition(fromStateType, toStateType);
//         }
//         
//         /// <summary>
//         /// 获取状态转换规则描述
//         /// </summary>
//         public string GetTransitionRulesDescription()
//         {
//             var transitions = GetAllValidTransitions();
//             string description = "状态转换规则:\n";
//             
//             foreach (var kvp in transitions)
//             {
//                 string fromStateName = GetStateName(kvp.Key);
//                 description += $"\n{fromStateName} 可以转换到:\n";
//                 
//                 foreach (var toStateType in kvp.Value)
//                 {
//                     string toStateName = GetStateName(toStateType);
//                     description += $"  - {toStateName}\n";
//                 }
//             }
//             
//             return description;
//         }
//         
//         /// <summary>
//         /// 检查状态是否可以从指定状态转换
//         /// </summary>
//         public bool CanTransitionFrom<TFromState, TToState>() 
//             where TFromState : FsmState<PlayerController> 
//             where TToState : FsmState<PlayerController>
//         {
//             return ValidateTransition<TFromState, TToState>();
//         }
//         
//         /// <summary>
//         /// 获取所有可能的下一个状态
//         /// </summary>
//         public List<Type> GetPossibleNextStates<TCurrentState>() 
//             where TCurrentState : FsmState<PlayerController>
//         {
//             Type currentStateType = typeof(TCurrentState);
//             var transitions = GetAllValidTransitions();
//             
//             if (transitions.TryGetValue(currentStateType, out var possibleStates))
//             {
//                 return possibleStates.ToList();
//             }
//             
//             return new List<Type>();
//         }
//         
//         /// <summary>
//         /// 获取状态转换统计信息
//         /// </summary>
//         public string GetTransitionStatistics()
//         {
//             var transitions = GetAllValidTransitions();
//             int totalTransitions = 0;
//             
//             foreach (var kvp in transitions)
//             {
//                 totalTransitions += kvp.Value.Count;
//             }
//             
//             return $"状态转换统计:\n" +
//                    $"总状态数: {transitions.Count}\n" +
//                    $"总转换数: {totalTransitions}\n" +
//                    $"平均每个状态的转换数: {(float)totalTransitions / transitions.Count:F1}";
//         }
//     }
// }
